/**
 * 生产制造命令单
 */
Ext.define('YX.smfr.ManufactureOrder', {
	  extend : 'Ext.panel.Panel',
	  vMo : null,
	  txtFilterMo : null,
	  btnSearchMo : null,
	  pelFiterMo : null,
	  txtMatCode : null,
	  txtMatVer : null,
	  txtMatDesc : null,
	  fcRow1 : null,
	  txtMatSpec : null,
	  numMoQty : null,
	  cmbMoStatus : null,
	  fcRow2 : null,
	  cmbMoType : null,
	  txtErpOrder : null,
	  numErpOrderQty : null,
	  fcRow3 : null,
	  sfLine : null,
	  datePlanStart : null,
	  datePlanEnd : null,
	  fcRow4 : null,
	  dateActualStart : null,
	  dateActualEnd : null,
	  sfClient : null,
	  fcRow5 : null,
	  sfProcessPath : null,
	  numInQty : null,
	  numOutQty : null,
	  fcRow6 : null,
	  txtMemo : null,
	  frmMo : null,
	  gridPathOpers : null,
	  btnSaveMo : null,
	  tabMo : null,
	  layout : {
		  type : 'vbox',
		  align : 'stretch'
	  },
	  require : ['UX.codeview.FieldX'],
	  initComponent : function() {
		  this.txtFilterMo = Ext.create('Ext.form.field.Text', {
			    fieldLabel : 'MO',
			    width : 300,
			    emptyText : T.label.filter,
			    listeners : {
				    scope : this,
				    specialkey : this.onTxtFilterMoSpecialKey
			    }
		    });
		  this.btnSearchMo = Ext.create('Ext.button.Button', {
			    text : T.label.search,
			    iconCls : 'icon-search',
			    itemId : 'btnSearchMo',
			    cls : 'marginL5',
			    scope : this,
			    handler : this.onBtnSearchMoClicked
		    });

		  this.pelFiterMo = Ext.create('Ext.panel.Panel', {
			    layout : 'hbox',
			    items : [this.txtFilterMo, this.btnSearchMo]
		    });

		  this.txtMatCode = Ext.create('Ext.form.field.Text', {
			    fieldLabel : T.label.prodCode,
			    flex : 1,
			    name : 'matCode',
			    readOnly : true
		    });
		  this.txtMatVer = Ext.create('Ext.form.field.Text', {
			    fieldLabel : T.label.ver,
			    flex : 1,
			    name : 'matVer',
			    readOnly : true
		    });
		  this.txtMatDesc = Ext.create('Ext.form.field.Text', {
			    fieldLabel : T.label.prodDesc,
			    flex : 1,
			    name : 'matDesc',
			    readOnly : true
		    });
		  this.fcRow1 = Ext.create('Ext.form.FieldContainer', {
			    layout : 'hbox',
			    anchor : '99%',
			    defaults : {
				    cls : 'marginL5'
			    },
			    items : [this.txtMatCode, this.txtMatVer, this.txtMatDesc]
		    });

		  this.txtMatSpec = Ext.create('Ext.form.field.Text', {
			    fieldLabel : T.label.spec,
			    flex : 1,
			    name : 'matSpec',
			    readOnly : true
		    });
		  this.numMoQty = Ext.create('Ext.form.field.Number', {
			    fieldLabel : T.label.qty,
			    name : 'moQty',
			    minValue : 0.001,
			    flex : 1
		    });
		  this.cmbMoStatus = Ext.create('Ext.form.field.ComboBox', {
			    fieldLabel : T.label.status,
			    flex : 1,
			    name : 'moStatus',
			    editable : false,
			    valueField : 'key1',
			    displayField : 'data1',
			    store : Ext.create('Ext.data.JsonStore', {
				      fields : ['key1', 'data1'],
				      autoLoad : true,
				      proxy : {
					      type : 'zbusrpc',
					      module : 'BasViewCommonDataSetupDetailService',
					      extraParams : {
						      groupName : 'MO_STATUS'
					      },
					      reader : {
						      root : 'cdsDtlList'
					      }
				      }
			      })
		    });
		  this.fcRow2 = Ext.create('Ext.form.FieldContainer', {
			    layout : 'hbox',
			    anchor : '99%',
			    defaults : {
				    cls : 'marginL5'
			    },
			    items : [this.txtMatSpec, this.numMoQty, this.cmbMoStatus]
		    });

		  this.cmbMoType = Ext.create('Ext.form.field.ComboBox', {
			    fieldLabel : T.label.type,
			    flex : 1,
			    name : 'moType',
			    editable : false,
			    valueField : 'key1',
			    displayField : 'data1',
			    store : Ext.create('Ext.data.JsonStore', {
				      fields : ['key1', 'data1'],
				      autoLoad : true,
				      proxy : {
					      type : 'zbusrpc',
					      module : 'BasViewCommonDataSetupDetailService',
					      extraParams : {
						      groupName : 'MO_TYPE'
					      },
					      reader : {
						      root : 'cdsDtlList'
					      }
				      }
			      })
		    });
		  this.txtErpOrder = Ext.create('Ext.form.field.Text', {
			    fieldLabel : T.label.erpOrder,
			    flex : 1,
			    name : 'erpOrderNo',
			    readOnly : true
		    });
		  this.numErpOrderQty = Ext.create('Ext.form.field.Number', {
			    fieldLabel : T.label.erpQty,
			    name : 'erpOrderQty',
			    flex : 1,
			    readOnly : true
		    });
		  this.fcRow3 = Ext.create('Ext.form.FieldContainer', {
			    layout : 'hbox',
			    anchor : '99%',
			    defaults : {
				    cls : 'marginL5'
			    },
			    items : [this.cmbMoType, this.txtErpOrder, this.numErpOrderQty]
		    });

		  this.sfLine = Ext.widget('codeviewfieldx', {
			    fieldLabel : T.label.lineCode,
			    flex : 1,
			    editable : false,
			    name : 'lineCode',
			    columns : [{
				      text : T.label.lineCode,
				      dataIndex : 'lineCode'
			      }, {
				      text : T.label.lineDesc,
				      dataIndex : 'lineDesc',
				      width : 160
			      }, {
				      text : T.label.shopCode,
				      dataIndex : 'shopCode'
			      }],
			    store : {
				    fields : ['lineCode', 'lineDesc', 'shopCode'],
				    proxy : {
					    type : 'zbusrpc',
					    module : 'SbasViewProductionLineService',
					    reader : {
						    type : 'json',
						    root : 'lineList'
					    }
				    }
			    }
		    });
		  this.datePlanStart = Ext.create('Ext.form.field.Date', {
			    fieldLabel : T.label.planStartDate,
			    name : 'planStartTime',
			    editable : false,
			    format : 'Y-m-d',
			    submitFormat : 'YmdHis',
			    altFormats : 'YmdHis|Ymd',
			    flex : 1
		    });
		  this.datePlanEnd = Ext.create('Ext.form.field.Date', {
			    fieldLabel : T.label.planEndDate,
			    name : 'planEndTime',
			    editable : false,
			    format : 'Y-m-d',
			    submitFormat : 'YmdHis',
			    altFormats : 'YmdHis|Ymd',
			    flex : 1
		    });
		  this.fcRow4 = Ext.create('Ext.form.FieldContainer', {
			    layout : 'hbox',
			    anchor : '99%',
			    defaults : {
				    cls : 'marginL5'
			    },
			    items : [this.sfLine, this.datePlanStart, this.datePlanEnd]
		    });

		  this.dateActualStart = Ext.create('Ext.form.field.Date', {
			    fieldLabel : T.label.actualStartDate,
			    name : 'actualStartTime',
			    readOnly : true,
			    format : 'Y-m-d',
			    submitValue : false,
			    altFormats : 'YmdHis|Ymd',
			    flex : 1
		    });
		  this.dateActualEnd = Ext.create('Ext.form.field.Date', {
			    fieldLabel : T.label.actualEndDate,
			    name : 'actualEndTime',
			    readOnly : true,
			    format : 'Y-m-d',
			    submitValue : false,
			    altFormats : 'YmdHis|Ymd',
			    flex : 1
		    });
		  this.sfClient = Ext.widget('codeviewfieldx', {
			    fieldLabel : T.label.client,
			    flex : 1,
			    readOnly : true,
			    name : 'clientCode',
			    columns : [{
				      text : T.label.clientCode,
				      dataIndex : 'clientCode'
			      }, {
				      text : T.label.clientName,
				      dataIndex : 'clientName'
			      }],
			    store : {
				    fields : ['clientCode', 'clientName'],
				    proxy : {
					    type : 'zbusrpc',
					    module : 'SbasViewClientRosterService',
					    reader : {
						    type : 'json',
						    root : 'clientList'
					    }
				    }
			    }
		    });
		  this.fcRow5 = Ext.create('Ext.form.FieldContainer', {
			    layout : 'hbox',
			    anchor : '99%',
			    defaults : {
				    cls : 'marginL5'
			    },
			    items : [this.dateActualStart, this.dateActualEnd, this.sfClient]
		    });

		  this.sfProcessPath = Ext.widget('codeviewfieldx', {
			    fieldLabel : T.label.processPath,
			    flex : 1,
			    editable : false,
			    name : 'pathCode',
			    columns : [{
				      text : T.label.processPath,
				      dataIndex : 'pathCode'
			      }, {
				      text : T.label.pathDesc,
				      dataIndex : 'pathDesc',
				      width : 200
			      }],
			    store : {
				    fields : ['pathCode', 'pathDesc'],
				    proxy : {
					    type : 'zbusrpc',
					    module : 'SbasViewProductProcessPathService',
					    reader : {
						    type : 'json',
						    root : 'pathList'
					    }
				    }
			    },
			    listeners : {
				    scope : this,
				    beforestoreload : this.onPathCodeBeforeStoreLoad,
				    select : this.onPathCodeSelect
			    }
		    });
		  this.numInQty = Ext.create('Ext.form.field.Number', {
			    fieldLabel : T.label.inQty,
			    flex : 1,
			    name : 'inQty',
			    readOnly : true
		    });
		  this.numOutQty = Ext.create('Ext.form.field.Number', {
			    fieldLabel : T.label.outQty,
			    flex : 1,
			    name : 'outQty',
			    readOnly : true
		    });
		  this.fcRow6 = Ext.create('Ext.form.FieldContainer', {
			    layout : 'hbox',
			    anchor : '99%',
			    defaults : {
				    cls : 'marginL5'
			    },
			    items : [this.sfProcessPath, this.numInQty, this.numOutQty]
		    });

		  this.txtMemo = Ext.create('Ext.form.field.Text', {
			    fieldLabel : T.label.memo,
			    anchor : '99%',
			    name : 'memo',
			    cls : 'marginL5',
			    maxLength : 100
		    });

		  this.frmMo = Ext.create('Ext.form.Panel', {
			    title : T.label.baseInfo,
			    flex : 1,
			    items : [this.fcRow1, this.fcRow2, this.fcRow3, this.fcRow4,
			      this.fcRow5, this.fcRow6, this.txtMemo]
		    });

		  this.gridPathOpers = Ext.create('Ext.grid.Panel', {
			    title : T.label.pathOperation,
			    width : 250,
			    columns : [{
				      text : T.label.operation,
				      dataIndex : 'oper'
			      }, {
				      text : T.label.operationDesc,
				      dataIndex : 'operDesc',
				      width : 150
			      }],
			    store : Ext.create('Ext.data.JsonStore', {
				      fields : ['pathCode', 'oper', 'operDesc'],
				      pageSize : 100,
				      proxy : {
					      type : 'zbusrpc',
					      module : 'SmfrViewProcessPathOperationService',
					      reader : {
						      root : 'operList'
					      }
				      }
			      })
		    });

		  this.btnSaveMo = Ext.create('Ext.button.Button', {
			    text : T.label.save,
			    itemId : 'btnSaveMo',
			    iconCls : 'icon-save',
			    scope : this,
			    handler : this.onBtnSaveMoClicked
		    });

		  this.tabMo = Ext.create('Ext.tab.Panel', {
			    flex : 1,
			    items : [{
				      title : T.label.baseInfo,
				      layout : {
					      type : 'hbox',
					      align : 'stretch'
				      },
				      items : [this.frmMo, this.gridPathOpers],
				      bbar : {
					      xtype : 'toolbar',
					      items : ['->', this.btnSaveMo]
				      }
			      }]
		    });

		  this.items = [this.pelFiterMo, this.tabMo]

		  this.callParent();
	  },
	  onTxtFilterMoSpecialKey : function(field, e) {
		  this.findMoAndFill(field.getValue());
	  },
	  onBtnSearchMoClicked : function(btn) {
		  this.findMoAndFill(this.txtFilterMo.getValue());
	  },
	  findMoAndFill : function(mo) {
		  var me = this;
		  me.vMo = mo;
		  YX.ZbusRpc.request({
			    module : 'SmfrViewProductionOrderService',
			    params : {
				    mo : mo
			    },
			    success : function(rsp) {
				    if (!Ext.isEmpty(rsp.orderList)) {
					    me.frmMo.getForm().setValues(rsp.orderList[0]);
					    if (me.sfProcessPath.getValue() != '') {
						    me.gridPathOpers.getStore().load({
							      params : {
								      pathCode : me.sfProcessPath.getValue()
							      }
						      });
					    }
				    } else {
					    me.frmMo.getForm().reset();
				    }
			    }
		    });
	  },
	  onPathCodeBeforeStoreLoad : function(field, store, params) {
	  	params = params || {};
		  Ext.apply(params, {
			    ignoreDelete : 'Y',
			    matCode : this.txtMatCode.getValue(),
			    matVer : this.txtMatVer.getValue()
		    });
	  },
	  onPathCodeSelect : function(field, records) {
		  this.gridPathOpers.getStore().load({
			    params : {
				    pathCode : records[0].get('pathCode')
			    }
		    });
	  },
	  onSfProcessPathBeforeShow : function(param) {
		  param = param || {};
		  Ext.apply(param, {
			    ignoreDelete : 'Y',
			    matCode : this.txtMatCode.getValue(),
			    matVer : this.txtMatVer.getValue()
		    });
	  },
	  onSfProcessPathSelect : function(records) {
		  this.gridPathOpers.getStore().load({
			    params : {
				    pathCode : records[0].get('pathCode')
			    }
		    });
	  },
	  onBtnSaveMoClicked : function(btn) {
		  if (!this.frmMo.getForm().isValid()) {
			  return;
		  }

		  var me = this;
		  Ext.Msg.show({
			    title : T.label.save,
			    msg : T.msg.are_you_sure_to_save_data,
			    icon : Ext.Msg.QUESTION,
			    buttons : Ext.Msg.YESNO,
			    fn : function(btnId) {
				    if (btnId == 'yes') {
					    btn.disable();

					    var parm = me.frmMo.getValues();
					    parm.mo = me.vMo;
					    YX.ZbusRpc.request({
						      module : 'SmfrSaveProductionOrderService',
						      params : parm,
						      showSuccess : true,
						      callback : function() {
							      btn.enable();
						      }
					      });
				    }
			    }
		    });
	  }
  });